package team.nmsg.ge.system.dao;

import java.io.Serializable;
import java.util.List;

import javax.persistence.EntityManager;

import org.hibernate.Session;
import org.springframework.jdbc.core.JdbcTemplate;

import team.nmsg.ge.system.bean.PageObject;

public interface INMSCommonDao {
	
	public EntityManager getEntityManager();
	
	public JdbcTemplate getJdbcTemplate();
	
	
	/**
	 * 执行更新 
	 * @param sql  完整的sql
	 * @return
	 */
	public int exeuteUpdate(String sql );
	
	/**
	 * 执行更新 
	 * @param sql  预编译sql
	 * @param objects	参数数组	不可为null
	 * @return
	 */
	public int exeuteUpdate(String sql , Object...objects );
	
	
	public Object getOneCellBySql(String sql , Object...args);
	
	public <T> T getRowBySql(Class<T> entitClazz , String sql , Object...args);
	
	
	public <T> List<T> getMultiRowBySql(Class<T> entitClazz , String sql , Object...args);
	
	public List getMultiRowBySql(String sql , Object...args);
	
	public long getMultiRowCountBySql(String sql,Object...args);
	
	public <T> List<T> getMultiRowBySqlPage(Class<T> entitClazz , String sql ,int startIndex , int pageSize, Object...args);
	
	public <T> PageObject<T> getMultiRowBySqlPage(Class<T> entitClazz , String sqlContent , String sqlCount , int startIndex , int pageSize, Object...args);
	
	public List getResultWithMax( String sql , int maxResult , Object... args) ;
	
	public<T> List<T> getEntitiesBySql(Class<T> entitClazz , String sql , Object...args);
	
	public <T>T getEntitiyBySql(Class<T> entitClazz , String sql , Object...args);
	
	public <T> T save( Class clazz , T t );
	
	public<T> T getObject( Class<T> clazz , Serializable id );
	
	public void updateObject( Object object);
	
	public void deleteObject( Object object);
	
	public <T> T saveObject( Class<T> clazz, T t);
	
	/**
	 * 获取符合条件的唯一实体
	 * @param clazz 实体类
	 * @param sql	预编译sql
	 * @param params参数数组  可以为null 即没有需要设置的参数
	 * @return
	 */
	public<T> T getEntityBySql( Class<T> clazz , String sql , Object... params );

	public Session getHSession();
	
}
